unit anaglavorazioni_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, fpcsvexport, FileUtil, LResources, Forms, Controls,
  Graphics, Dialogs, StdCtrls, ZDataset, ZSqlUpdate, datamodule_frm;

type

  { Tanaglavorazioni }

  Tanaglavorazioni = class(TForm)
    btsalva: TButton;
    btelimina: TButton;
    btnuovo: TButton;
    btesporta: TButton;
    CSVExporter1: TCSVExporter;
    ednum: TEdit;
    cblavorazioni: TListBox;
    edvalore: TMemo;
    SaveDialog1: TSaveDialog;
    zq_lavorazioni2: TZQuery;
    zq_lavorazioni: TZQuery;
    ZUpdateSQL1: TZUpdateSQL;
    procedure bteliminaClick(Sender: TObject);
    procedure btnuovoClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);
    procedure btesportaClick(Sender: TObject);
    procedure cblavorazioniChange(Sender: TObject);
    procedure loadcombolavorazioni();
    procedure getnextnum();
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  anaglavorazioni: Tanaglavorazioni;

implementation

{ Tanaglavorazioni }

procedure Tanaglavorazioni.FormClose(Sender: TObject;
  var CloseAction: TCloseAction);
begin
  CloseAction:=cafree;
end;

procedure Tanaglavorazioni.btsalvaClick(Sender: TObject);
begin
  if ednum.Text='' then
  begin
       ShowMessage('Devi indicare il numero della lavorazione.');
       ednum.SetFocus ;
       Exit();
  end;
  if edvalore.Text='' then
  begin
       ShowMessage('Devi indicare la descrizione della lavorazione.');
       edvalore.SetFocus ;
       Exit();
  end;
  if cblavorazioni.ItemIndex<>-1 then
     begin
     ////////////////////////////////////////////////////////////////////
     ///              MODIFICA lavorazione
     ////////////////////////////////////////////////////////////////////
     //Se è stato selezionato un'azienda dalla combo procedi con la modifica
     with zq_lavorazioni2 do
     begin
          Close;
          sql.Clear;
          sql.Add('UPDATE ANAGLAVORAZIONI SET '+
          'NOME=:NOME '+
          'WHERE IDLAVORAZIONE=:ID');
          ParamByName('ID').Asinteger:=integer(cblavorazioni.Items.Objects[cblavorazioni.ItemIndex]);
          ParamByName('NOME').AsString:=edvalore.Text;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          LoadComboLavorazioni();

          //comunica l'esito positivo della modifica
          ShowMessage(edvalore.Text+ ' è stato modificato correttamente.');
     end
     end
     else
     begin
     ////////////////////////////////////////////////////////////////////
     ///              INSERIMENTO lavorazione
     ////////////////////////////////////////////////////////////////////
     //inserisci la nuova azienda nel DB
     with zq_lavorazioni2 do
     begin
          Close;
          sql.Clear;
          sql.Add('INSERT INTO ANAGLAVORAZIONI ('+
          'IDLAVORAZIONE,'+
          'NOME,'+
          'IDDITTA'+
          ') VALUES (:ID,:NOME,:IDDITTA)');
          ParamByName('ID').AsString:= ednum.Text;
          ParamByName('NOME').AsString:=edvalore.Text;
          ParamByName('IDDITTA').AsInteger:=DataModule1.idditta;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          loadcombolavorazioni();
          //comunica l'esito positivo dell'inserimento
          ShowMessage(edvalore.Text+ ' è stato inserito correttamente.');
          edvalore.SetFocus;
     end
     end ;
     btnuovoClick(self);
end;

procedure Tanaglavorazioni.btesportaClick(Sender: TObject);
begin
     //esporto in csv i dati della tabella
     SaveDialog1.InitialDir:=GetUserDir;

     if SaveDialog1.Execute then
     begin
     zq_lavorazioni.open;
          CSVExporter1.FileName:=SaveDialog1.FileName;
          CSVExporter1.execute;
          zq_lavorazioni.Close;
     end;
end;



procedure Tanaglavorazioni.cblavorazioniChange(Sender: TObject);
begin
   if cblavorazioni.ItemIndex <>-1 then
     begin
          with zq_lavorazioni2 do
          begin
               Close;
               sql.Clear;
               sql.Add('SELECT * FROM ANAGLAVORAZIONI WHERE IDLAVORAZIONE=:ID');
               ParamByName('ID').Asinteger:=integer(cblavorazioni.Items.Objects[cblavorazioni.ItemIndex]);
               ExecSQL;
               Open;
               ednum.Text:=FieldByName('IDLAVORAZIONE').AsString;
               edvalore.Text:=FieldByName('NOME').AsString;
          end;
     end;
end;

procedure Tanaglavorazioni.btnuovoClick(Sender: TObject);
begin
  //pulisco i campi
  cblavorazioni.ClearSelection;
  getnextnum();
  edvalore.Text:='';
end;

procedure Tanaglavorazioni.bteliminaClick(Sender: TObject);
begin
   //controllo che sia stata selezionata una lavorazione
   if cblavorazioni.ItemIndex<>-1 then
   begin


      //chiede conferma e poi cancella il record
      if MessageDlg('Si sta per eliminare '+edvalore.Text+' dal database. Continuare?',mtInformation, mbOKCancel, 0)= mrOK     then
      begin
           with zq_lavorazioni2 do
           begin
                Close;
                sql.Clear;
                sql.Add('DELETE FROM ANAGLAVORAZIONI WHERE IDLAVORAZIONE=:ID');
                ParamByName('ID').Asinteger:=integer(cblavorazioni.Items.Objects[cblavorazioni.ItemIndex]);
                ExecSQL;
           end;
           //rilegge tutte le aziende e le carica nelle combo
           loadcombolavorazioni();
           //pulisce tutti i campi
           btnuovoClick(self);
           getnextnum();
      end
   end
   else ShowMessage('Per eliminare una lavorazione è necessario prima selezionarne una dalla lista.');

end;

procedure Tanaglavorazioni.loadcombolavorazioni();
begin
 //svuota combo
cblavorazioni.Clear;
with zq_lavorazioni do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT  NOME,IDLAVORAZIONE FROM ANAGLAVORAZIONI');
             sql.add('WHERE IDDITTA=:DITTA');
             sql.add('ORDER BY IDLAVORAZIONE');
             ParamByName('DITTA').AsInteger:=datamodule1.idditta;
             ExecSQL;
             Open;
             while not EOF do
             begin
                  //carico il campo ID e NOME di ogni singolo record nella combo di visualizzazione
                  //di tutte le lavorazioni
                  cblavorazioni.Items.AddObject(FieldByName('IDLAVORAZIONE').AsString+' '+FieldByName('NOME').AsString,TObject(FieldByName('IDLAVORAZIONE').Asinteger));
                  Next;
             end;
             close;
        end
end;


procedure Tanaglavorazioni.getnextnum();
begin
with zq_lavorazioni2 do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT MAX(IDLAVORAZIONE) AS MAXID FROM ANAGLAVORAZIONI');
             sql.add('WHERE IDDITTA=:DITTA');
             ParamByName('DITTA').AsInteger:=datamodule1.idditta;
             ExecSQL;
             Open;
             ednum.Text:=IntToStr(FieldByName('MAXID').AsInteger + 1);
             close;
        end
end;

procedure Tanaglavorazioni.FormCreate(Sender: TObject);
begin
 loadcombolavorazioni();
 getnextnum();
end;

initialization
  {$I anaglavorazioni_frm.lrs}

end.

